package com.bdqn.qnnews.wemedia.service.impl;

import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.json.JSONUtil;
import com.bdqn.qnnews.common.constants.ScheduleConstants;
import com.bdqn.qnnews.schedule.api.dto.TaskDto;
import com.bdqn.qnnews.schedule.api.feign.TaskFeignClient;
import com.bdqn.qnnews.wemedia.entity.WmNews;
import com.bdqn.qnnews.wemedia.service.WmNewsTaskService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * @author xlzhang
 * @date 2024/1/17 10:05
 */
@Slf4j
@RequiredArgsConstructor
@Service
public class WmNewsTaskServiceImpl implements WmNewsTaskService {

    private final TaskFeignClient taskFeignClient;

    @Override
    public Long addWmNewsTask(WmNews wmNews) {
        // 将wmnews 转换为  taskDto
        //模拟文章定时发布
        TaskDto taskDto = new TaskDto();
        taskDto.setTaskTopic(ScheduleConstants.TASK_TOPIC_NEWS_PUBLISH);

        // 任务数据
        // 添加任务数据，当前主要添加文章id就可以了，可以根据业务需求任意增加其他数据
        // 为了后续获取任务数据解析方便，这里直接使用自媒体文章对象封装
        // 同时为了redis队列中数据量尽量小，这里只需要文章id，所以新创建一个对象封装数据id
        final WmNews taskNews = new WmNews();
        taskNews.setId(wmNews.getId());
        taskDto.setParameters(JSONUtil.toJsonStr(taskNews));

        // 设置执行时间，需要将时间转换为时间搓
        taskDto.setExecuteTime(LocalDateTimeUtil.toEpochMilli(wmNews.getPublishTime()));
        // 远程调用执行添加任务
        return taskFeignClient.addTask(taskDto);
    }
}
